package Stragos.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
//import java.util.Collection;

import Stragos.excepcion.DAOExcepcion;
import Stragos.modelo.Local;
import Stragos.util.ConexionBD;

 
public class LocalDAO extends BaseDAO{
	
    
    public Local insertar(Local vo) throws DAOExcepcion {
            System.out.println("LocalDAO: insertar(Local vo)");
            String query = "INSERT INTO local (nombre,direccion, telefono, correo,descripcion,elog, idadministrador) VALUES (?,?,?,?,?,?,?)";
            Connection con = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            
            try {
                    con = ConexionBD.obtenerConexion();
                    stmt = con.prepareStatement(query);
                    stmt.setString(1, vo.getNombre());
                    stmt.setString(2, vo.getDireccion());
                    stmt.setString(3, vo.getTelefono());
                    stmt.setString(4, vo.getCorreo());
                    stmt.setString(5, vo.getDescripcion());
                    stmt.setBoolean(6, vo.getElog());
                    stmt.setInt(7, vo.getIdAdministrador());
                    int i = stmt.executeUpdate();
                    if (i != 1) {
                            throw new SQLException("No se pudo insertar");
                    }
                    // Obtener el ultimo id
	    			int id = 0;
	    			query = "select last_insert_id()";
	    			stmt = con.prepareStatement(query);
	    			rs = stmt.executeQuery();
	    			if (rs.next()) {
	    				id = rs.getInt(1);
	    			}
	    			vo.setIdLocal(id);

                    
            } catch (SQLException e) {
                    System.err.println(e.getMessage());
                    throw new DAOExcepcion(e.getMessage());
            } finally {
            	this.cerrarResultSet(rs);
    			this.cerrarStatement(stmt);
    			this.cerrarConexion(con);
    		}
    		
            return vo;
    }
    
    
    
    public ArrayList<Local> buscarPorNombre(String nombre)
			throws DAOExcepcion {
		String query = "select idlocal,nombre,direccion, telefono, correo,descripcion,elog, idadministrador from local where nombre like ?";
		ArrayList<Local> lista = new ArrayList<Local>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Local vo = new Local();
				vo.setIdLocal(rs.getInt("idlocal"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDireccion(rs.getString("direccion"));
				vo.setTelefono(rs.getString("telefono"));
				vo.setCorreo(rs.getString("correo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setElog(rs.getBoolean("elog"));
				vo.setIdAdministrador(rs.getInt("idadministrador"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}


	public Local obtener(int idLocal) throws DAOExcepcion {
		Local vo = new Local();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idlocal,nombre,direccion, telefono, correo,descripcion,elog, idadministrador from local where idlocal=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idLocal);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdLocal(rs.getInt("idlocal"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDireccion(rs.getString("direccion"));
				vo.setTelefono(rs.getString("telefono"));
				vo.setCorreo(rs.getString("correo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setElog(rs.getBoolean("elog"));
				vo.setIdAdministrador(rs.getInt("idadministrador"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(int idLocal) throws DAOExcepcion {
		String query = "delete from local WHERE idlocal=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idLocal);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Local actualizar(Local vo) throws DAOExcepcion {
		String query = "update local set nombre=?,direccion=?, telefono=?, correo=?,descripcion=?,elog=?, idadministrador=? where idlocal=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombre());
			stmt.setString(2, vo.getDireccion());
			stmt.setString(3, vo.getTelefono());
			stmt.setString(4, vo.getCorreo());
			stmt.setString(5, vo.getDescripcion());
			stmt.setBoolean(6, vo.getElog());
			stmt.setInt(7, vo.getIdAdministrador());
			stmt.setInt(8, vo.getIdLocal());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public ArrayList<Local> listar() throws DAOExcepcion {
		ArrayList<Local> c = new ArrayList<Local>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select idlocal,nombre,direccion, telefono, correo,descripcion,elog, idadministrador from local where elog=true order by nombre";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Local vo = new Local();
				vo.setIdLocal(rs.getInt("idlocal"));
				vo.setNombre(rs.getString("nombre"));
				vo.setDireccion(rs.getString("direccion"));
				vo.setTelefono(rs.getString("telefono"));
				vo.setCorreo(rs.getString("correo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setElog(rs.getBoolean("elog"));
				vo.setIdAdministrador(rs.getInt("idadministrador"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}


}